package xnsq

import (
	"time"

	"gitee.com/xiaoyutab/xgotool/optional/xlog"
	"github.com/nsqio/go-nsq"
)

// NSQ队列监听
// 导出函数，需要在入口处进行执行 `go xnsq.Listen()` 来进行同步监听
func Listen() {
	// 若未开启NSQ队列
	if _default.Get == "" || _default.GetTopic == "" {
		return
	}
	configs := nsq.NewConfig()
	configs.MaxInFlight = _default.GetMaxInFlight
	consumer, err := nsq.NewConsumer(_default.GetTopic, _default.GetChannel, configs)
	if err != nil {
		xlog.Warning("NSQ队列配置失败", err)
		return
	}
	defer consumer.Stop()
	// 设置此使用者接收的消息的处理程序。可以调用多次。更多参数见 AddConcurrentHandlers.
	consumer.AddHandler(&myMessageHandler{})
	// 使用nsqlookupd可以发现nsqd实例。更多参数见ConnectToNSQD、ConnectToNSQ、ConnectToNSFLookupds。
	err = consumer.ConnectToNSQLookupd(_default.Get)
	if err != nil {
		xlog.Warning("NSQ队列监听失败", err)
		return
	}
	// 休眠，阻塞程序运行
	for {
		// 如果设置了停止就直接退出该程序，不再进行监听
		if _stop {
			_stop_ing = false
			return
		}
		time.Sleep(time.Second)
	}
}
